<?php
/*
根据一个数输出这个图形，例如n=3:
3	4	5
10	11	6
9	8	7
函数：
思路：
1，初始化多维数组
$array[$i][$j]
$array=array(
	array(0,0,0),
	array(0,0,0),
	array(0,0,0)
)
2，移动
向上移动$array[$i--][$j]
向下移动$array[$i++][$j]
向左移动$array[$i][$j--]
向右移动$array[$i][$j++]
*/

function test($n){
	if($n<3){
		die("数字必须大于三");
	}
	/*1，初始数组*/
	for($x=0;$x<$n;$x++){
		for($y=0;$y<$n;$y++){
			$arr[$x][$y]=0;
		}
	}
	/*2，初始化几个变量*/
	$direction='R';//R(右),L(左),T(上),B(下)
	$maxn=$n*$n+$n-1;//计算最后一个数字
	$x=$y=0;
	/*3，循环每个数字，放到数组*/
	for($i=$n;$i<=$maxn;$i++){
		if($arr[$x][$y]==0){
			$arr[$x][$y]=$i;
		}else{
			if($direction == 'R'){
				if(($y+1) < $n && $arr[$x][$y+1] == 0){
					$y++;
				}else {
					$direction = 'B';
				}
			}
			if($direction == 'B'){
				if(($x+1) < $n && $arr[$x+1][$y] == 0){
					$x++;
				}else {
					$direction = 'L';
				}
			}
			if($direction == 'L'){
				if(($y-1) >= 0 && $arr[$x][$y-1] == 0){
					$y--;
				}else {
					$direction = 'T';
				}
			}
			if($direction == 'T'){
				if(($x-1) >= 0 && $arr[$x-1][$y] == 0){
					$x--;
				}else{
					$direction = 'R';
					if($direction == 'R'){
						if(($y+1) < $n && $arr[$x][$y+1] == 0){
							$y++;
						}else {
							$direction = 'B';
						}
					}
				}
			}
			/*放入值*/
			$arr[$x][$y]=$i;
		}
	}
	$table="<table border='1'>";
	foreach ($arr as $k1 => $v1) {
		$table.="<tr>";
		foreach ($v1 as $k2 => $v2) {
			$table.="<td>$v2</td>";
		}
		$table.="</tr>";
	}
	$table.="</table>";
	echo $table;
}
test(3);

?>